﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using csvmb.contracts;
using csvmb.index.contracts;

namespace csvmb.index
{
    public class Navigieren:INavigieren
    {
        private IIndex index;
       
        public void Process(Tuple<int, Richtung, long> message)
        {
            Trace.TraceInformation("Index.Navigieren mit {0}, {1}, {2}", message.Item1, message.Item2, message.Item3);
            //Anzahl der Ausschnitte berechnen:
            long Anzahl_der_Ausschnitte = (long)Math.Ceiling((decimal)index.Count / (decimal)message.Item1);
            long Ausschnittsnummer = 0;
            switch (message.Item2)
            {
                case Richtung.Vor:
                    Ausschnittsnummer = message.Item3 + 1;
                    break;
                case Richtung.Zurueck:
                    Ausschnittsnummer = message.Item3 - 1;
                    break;
                case Richtung.Anfang:
                    Ausschnittsnummer = 1;
                    break;
                case Richtung.Ende:
                    Ausschnittsnummer = Anzahl_der_Ausschnitte;
                    break;
            }

            Result(new Tuple<long, int, long>(Ausschnittsnummer, message.Item1, Anzahl_der_Ausschnitte));
        }

        public event Action<Tuple<long, int, long>> Result;

        public void Inject(IIndex independent)
        {
            Trace.TraceInformation("Inject");

            index = independent;
        }
    }

}
